/*
 * JVM_OpcodeCompare.c
 *
 *  Created on: 05.01.2011
 *      Author: Tavin
 */
#include <stdint.h>

#include "JVM_StatusCodes.h"
#include "JVM_Opcode.h"
#include "JVM_OpcodeCompare.h"
#include "JVM_StatusCodes.h"

/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_lcmp									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_lcmp()
{
	int64_t value1;
	int64_t value2;

	value1=JVM_Opcode_popLongValue();
	value2=JVM_Opcode_popLongValue();

	if (value1==value2)
		{
		JVM_Opcode_pushIntValue(0);
		}
	else if (value1>value2)
		{
		JVM_Opcode_pushIntValue(1);
		}
	else
		{
		JVM_Opcode_pushIntValue(-1);
		}


	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_fcmpl								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_fcmpl()
{
	float value1;
	float value2;

	value1=JVM_Opcode_popFloatValue();
	value2=JVM_Opcode_popFloatValue();

	if (value1==value2)
		{
		JVM_Opcode_pushIntValue(0);
		}
	else if (value1>value2)
		{
		JVM_Opcode_pushIntValue(1);
		}
	else
		{
		JVM_Opcode_pushIntValue(-1);
		}



	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_fcmpg								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_fcmpg()
{
	float value1;
	float value2;

	value1=JVM_Opcode_popFloatValue();
	value2=JVM_Opcode_popFloatValue();

	if (value1==value2)
		{
		JVM_Opcode_pushIntValue(0);
		}
	else if (value1>value2)
		{
		JVM_Opcode_pushIntValue(1);
		}
	else
		{
		JVM_Opcode_pushIntValue(-1);
		}



	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_dcmpl								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_dcmpl()
{
	double value1;
	double value2;

	value1=JVM_Opcode_popDoubleValue();
	value2=JVM_Opcode_popDoubleValue();

	if (value1==value2)
		{
		JVM_Opcode_pushIntValue(0);
		}
	else if (value1>value2)
		{
		JVM_Opcode_pushIntValue(1);
		}
	else
		{
		JVM_Opcode_pushIntValue(-1);
		}



	return(STCD_OK);
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_cmd_dcmpg								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_cmd_dcmpg()
{
	double value1;
	double value2;

	value1=JVM_Opcode_popDoubleValue();
	value2=JVM_Opcode_popDoubleValue();

	if (value1==value2)
		{
		JVM_Opcode_pushIntValue(0);
		}
	else if (value1>value2)
		{
		JVM_Opcode_pushIntValue(1);
		}
	else
		{
		JVM_Opcode_pushIntValue(-1);
		}



	return(STCD_OK);
}
